from flask import Flask
import config
from exts import db,mail,cache,csrf,avatars,jwt,cors
from flask_migrate import Migrate
from models import auth
from apps.front import front_bp
from my_celery import make_celery
from apps.media import media_bp
from apps.cmsapi import cmsapi_bp
import commands

# 将ORM 模型映射到数据库三部曲
# 初始化迁移脚本 flask db init
# 将ORM模型生成迁徙脚本 flask db migrate
# 运行迁徙脚本 生成表 flask db upgrade

# flask 中操作redis需要安装两个包：
# redis
# hiredis  都是通过pip install 来安装
# gevent （windows上操作celery需要这个包）
app = Flask(__name__)
app.config.from_object(
    config
)
# 将SQLAlchemy和app进行一个绑定
# 因为它操作数据库就必须要有配置信息 而配置信息在app.config中
# flask中如果想使用csrf 必须要安装flask-wtf
db.init_app(app)
mail.init_app(app)
cache.init_app(app)
csrf.init_app(app)
avatars.init_app(app)
jwt.init_app(app)
cors.init_app(app, resources={r"/cmsapi/*": {"origins": "*"}})

migrate = Migrate(app,db)

mycelery = make_celery(app)

# 注册蓝图
app.register_blueprint(front_bp)
app.register_blueprint(media_bp)
app.register_blueprint(cmsapi_bp)

# 排除cmsapi的csrf验证
csrf.exempt(cmsapi_bp)

# 注册命令
app.cli.command("init_boards")(commands.init_boards)
app.cli.command("create_test_posts")(commands.create_test_posts)
app.cli.command("init_roles")(commands.init_roles)
app.cli.command("bind_roles")(commands.bind_roles)
app.cli.command("init_developor")(commands.init_developor)

# kgktktollwbydifj
if __name__ == '__main__':
    app.run()
